

package com.scs.application.modules.settlement.entity;

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.scs.application.core.model.DataEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;

/**
 * 病人消耗主单实体对象
 */
@TableName("dept_oprt_use")
@Data
@EqualsAndHashCode(callSuper = false)
@ToString(callSuper = true)
@Accessors(chain = true)
public class DeptOprtUse extends DataEntity implements Serializable {

    /**
     * 院方ID
     */
    @NotNull(message = "院方ID不能为空")
    private String hospitalId;

    /**
     * 院方名称
     */
    @NotBlank(message = "院方名称不能为空")
    @Length(min = 1, max = 50, message = "院方名称长度必须介于 1 和 50 之间")
    private String hospitalName;

    /**
     * 消耗单编号
     */
    @Length(max = 255, message = "消耗单编号长度必须介于 0 和 255 之间")
    private String busKey;

    /**
     * 单据类型
     */
    @Length(max = 20, message = "单据类型长度必须介于 0 和 20 之间")
    private String busType;

    /**
     * 消耗日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JSONField(format = "yyyy-MM-dd")
    private java.util.Date busDate;

    /**
     * 手术id
     */
    private String oprtId;

    /**
     * 手术名称
     */
    @Length(max = 200, message = "手术名称长度必须介于 0 和 200 之间")
    private String oprtName;

    /**
     * 患者id
     */
    private String patientId;

    /**
     * 患者名称
     */
    @Length(max = 20, message = "患者名称长度必须介于 0 和 20 之间")
    private String patientName;

    /**
     * 患者年龄
     */
    private String patientAge;

    /**
     * 住院编号
     */
    @Length(max = 50, message = "住院编号长度必须介于 0 和 50 之间")
    private String patientNo;

    /**
     * 床位号
     */
    @Length(max = 50, message = "床位号长度必须介于 0 和 50 之间")
    private String bedNo;

    /**
     * 主治医生
     */
    @Length(max = 20, message = "主治医生长度必须介于 0 和 20 之间")
    private String docNameSug;

    /**
     * 申请医生
     */
    @Length(max = 20, message = "申请医生长度必须介于 0 和 20 之间")
    private String docNameApply;

    /**
     * 消耗科室
     */
    @NotNull(message = "消耗科室不能为空")
    private String deptId;

    /**
     * 消耗科室
     */
    @Length(max = 50, message = "消耗科室长度必须介于 0 和 50 之间")
    private String deptName;

    /**
     * 关联key
     */
    @Length(max = 50, message = "关联key长度必须介于 0 和 50 之间")
    private String refKey;

    /**
     * 关联table
     */
    @Length(max = 50, message = "关联table长度必须介于 0 和 50 之间")
    private String refTable;

    /**
     * 是否冲红消耗单0:否 1：是
     */
    private Integer flagUseRedType;

    /**
     * 手术日期
     */
    private java.util.Date oprtDate;

    /**
     * 手术单号
     */
    @NotBlank(message = "手术单号不能为空")
    @Length(min = 1, max = 100, message = "手术单号长度必须介于 1 和 100 之间")
    private String oprtCode;

    /**
     * 金额
     */
    private Double amount;

    /**
     * 库存地ID|库存地ID
     */
    @NotNull(message = "库存地ID|库存地ID不能为空")
    private String warehouseId;

    /**
     * 库存地全称|库存地全称
     */
    @Length(max = 100, message = "库存地全称|库存地全称长度必须介于 0 和 100 之间")
    private String warehouseName;

    /**
     * 流程状态。start：草稿，end：审核，其他根据流程配置自定义
     */
    @Length(max = 20, message = "流程状态。start：草稿，end：审核，其他根据流程配置自定义长度必须介于 0 和 20 之间")
    private String flowStatus;

    /**
     * 流程修改时间
     */
    private java.util.Date flowModified;

    /**
     * 流程修改人
     */
    @Length(max = 50, message = "流程修改人长度必须介于 0 和 50 之间")
    private String flowModifier;

    /**
     * 住院号|患者住院唯一标识
     */
    @Length(max = 50, message = "住院号|患者住院唯一标识长度必须介于 0 和 50 之间")
    private String inpatientNo;

    /**
     * 门诊号|患者门诊唯一标识
     */
    @Length(max = 50, message = "门诊号|患者门诊唯一标识长度必须介于 0 和 50 之间")
    private String outpatientNo;

    /**
     * 执行科室ID|比如手术室，导管室
     */
    private String execDeptId;

    /**
     * 执行科室名称
     */
    @Length(max = 50, message = "执行科室名称长度必须介于 0 和 50 之间")
    private String execDeptName;

    /**
     * 备注
     */
    @Length(max = 200, message = "备注长度必须介于 0 和 200 之间")
    private String remark;

    /**
     * 冲红单号
     */
    @Length(max = 200, message = "冲红单号长度必须介于 0 和 200 之间")
    private String refOprtBusKey;

    /**
     * 供应商名称
     */
    @TableField(exist = false)
    private String supplierName;

}
